package br.com.jdcanado.gae.inforse.model;

import java.io.Serializable;
import java.util.List;

import javax.jdo.annotations.Embedded;
import javax.jdo.annotations.EmbeddedOnly;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;
import javax.persistence.Embeddable;

import com.google.appengine.api.datastore.Key;

@PersistenceCapable(identityType=IdentityType.APPLICATION, detachable="true")
public class ValorOrcamento implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@PrimaryKey
	@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
	private Key id;
	
	@Persistent
	@Embedded
	private CustoFixo custoFixo;
	
	@Persistent
	@Embedded
	private CustoOperacional custoOperacional;
	
	@Persistent
	private TotalOrcamental totalOrcamental;
	
	@Persistent(mappedBy="valorOrcamento")
	private List<CustoProfissionais> custoProfissionaisSets;
	
	@Persistent(mappedBy="valorOrcamento")
	private Orcamento orcamento;
	
	//classes embarcadas
	@PersistenceCapable(detachable="true")
	@EmbeddedOnly
	public static class CustoFixo implements Serializable{
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		@Persistent
		private float proLabore;
		
		@Persistent
		private float salarioAdministrativo;
		
		@Persistent
		private float seguros;
		
		@Persistent
		private float despesasBancarias;
		
		@Persistent
		private float juros;
		
		@Persistent
		private float honorariosContabeis;
		
		@Persistent
		private float materialExpediente;
		
		@Persistent
		private float aluguel;
		
		@Persistent
		private float despesaViagens;
		
		@Persistent
		private float agua;
		
		@Persistent
		private float luz;
		
		@Persistent
		private float telefone;
		
		@Persistent
		private float publicidade;
		
		@Persistent
		private float servicosInternet;
		
		@Persistent
		private float manutencaoVeicular;
		
		@Persistent
		private float outros;
		
		@Persistent
		private float pertinentesVariados;
		
		@Persistent
		private float qtdHorasMes;

		public float getProLabore() {
			return proLabore;
		}

		public void setProLabore(float proLabore) {
			this.proLabore = proLabore;
		}

		public float getSalarioAdministrativo() {
			return salarioAdministrativo;
		}

		public void setSalarioAdministrativo(float salarioAdministrativo) {
			this.salarioAdministrativo = salarioAdministrativo;
		}

		public float getSeguros() {
			return seguros;
		}

		public void setSeguros(float seguros) {
			this.seguros = seguros;
		}

		public float getDespesasBancarias() {
			return despesasBancarias;
		}

		public void setDespesasBancarias(float despesasBancarias) {
			this.despesasBancarias = despesasBancarias;
		}

		public float getJuros() {
			return juros;
		}

		public void setJuros(float juros) {
			this.juros = juros;
		}

		public float getHonorariosContabeis() {
			return honorariosContabeis;
		}

		public void setHonorariosContabeis(float honorariosContabeis) {
			this.honorariosContabeis = honorariosContabeis;
		}

		public float getMaterialExpediente() {
			return materialExpediente;
		}

		public void setMaterialExpediente(float materialExpediente) {
			this.materialExpediente = materialExpediente;
		}

		public float getAluguel() {
			return aluguel;
		}

		public void setAluguel(float aluguel) {
			this.aluguel = aluguel;
		}

		public float getDespesaViagens() {
			return despesaViagens;
		}

		public void setDespesaViagens(float despesaViagens) {
			this.despesaViagens = despesaViagens;
		}

		public float getAgua() {
			return agua;
		}

		public void setAgua(float agua) {
			this.agua = agua;
		}

		public float getLuz() {
			return luz;
		}

		public void setLuz(float luz) {
			this.luz = luz;
		}

		public float getTelefone() {
			return telefone;
		}

		public void setTelefone(float telefone) {
			this.telefone = telefone;
		}

		public float getPublicidade() {
			return publicidade;
		}

		public void setPublicidade(float publicidade) {
			this.publicidade = publicidade;
		}
		
		public float getManutencaoVeicular() {
			return manutencaoVeicular;
		}

		public void setManutencaoVeicular(float manutencaoVeicular) {
			this.manutencaoVeicular = manutencaoVeicular;
		}
		
		public float getPertinentesVariados() {
			return pertinentesVariados;
		}

		public void setPertinentesVariados(float pertinentesVariados) {
			this.pertinentesVariados = pertinentesVariados;
		}

		public float getQtdHorasMes() {
			return qtdHorasMes;
		}

		public void setQtdHorasMes(float qtdHorasMes) {
			this.qtdHorasMes = qtdHorasMes;
		}

		public float getServicosInternet() {
			return servicosInternet;
		}

		public void setServicosInternet(float servicosInternet) {
			this.servicosInternet = servicosInternet;
		}

		public float getOutros() {
			return outros;
		}

		public void setOutros(float outros) {
			this.outros = outros;
		}		
		
	}
	
	@PersistenceCapable(detachable="true")
	@EmbeddedOnly
	public static class CustoOperacional implements Serializable{ 
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		@Persistent
		private float kmRodados;
		
		@Persistent
		private float kmLitro;
		
		@Persistent
		private float valorLitro;
		
		@Persistent
		private float valorDepreciacao;
		
		@Persistent
		private float diasAlimentacao;
		
		@Persistent
		private float valorRefeicao;
		
		@Persistent
		private float qtdRefeicoes;
		
		@Persistent
		private float diasAcomodacao;
		
		@Persistent
		private float valorAcomodacao;
		
		@Persistent
		private float qtdPassagem;
		
		@Persistent
		private float valorPassagem;
		
		@Persistent
		private float qtdDiasAluguelCarro;
		
		@Persistent
		private float valorAluguelCarro;
		
		@Persistent
		private float pedagio;
		
		@Persistent
		private float pertinentes;		

		public float getQtdDiasAluguelCarro() {
			return qtdDiasAluguelCarro;
		}

		public void setQtdDiasAluguelCarro(float qtdDiasAluguelCarro) {
			this.qtdDiasAluguelCarro = qtdDiasAluguelCarro;
		}

		public float getValorAluguelCarro() {
			return valorAluguelCarro;
		}

		public void setValorAluguelCarro(float valorAluguelCarro) {
			this.valorAluguelCarro = valorAluguelCarro;
		}

		public float getKmRodados() {
			return kmRodados;
		}

		public void setKmRodados(float kmRodados) {
			this.kmRodados = kmRodados;
		}

		public float getKmLitro() {
			return kmLitro;
		}

		public void setKmLitro(float kmLitro) {
			this.kmLitro = kmLitro;
		}

		public float getValorLitro() {
			return valorLitro;
		}

		public void setValorLitro(float valorLitro) {
			this.valorLitro = valorLitro;
		}

		public float getValorDepreciacao() {
			return valorDepreciacao;
		}

		public void setValorDepreciacao(float valorDepreciacao) {
			this.valorDepreciacao = valorDepreciacao;
		}

		public float getDiasAlimentacao() {
			return diasAlimentacao;
		}

		public void setDiasAlimentacao(float diasAlimentacao) {
			this.diasAlimentacao = diasAlimentacao;
		}

		public float getValorRefeicao() {
			return valorRefeicao;
		}

		public void setValorRefeicao(float valorRefeicao) {
			this.valorRefeicao = valorRefeicao;
		}

		public float getQtdRefeicoes() {
			return qtdRefeicoes;
		}

		public void setQtdRefeicoes(float qtdRefeicoes) {
			this.qtdRefeicoes = qtdRefeicoes;
		}

		public float getDiasAcomodacao() {
			return diasAcomodacao;
		}

		public void setDiasAcomodacao(float diasAcomodacao) {
			this.diasAcomodacao = diasAcomodacao;
		}

		public float getValorAcomodacao() {
			return valorAcomodacao;
		}

		public void setValorAcomodacao(float valorAcomodacao) {
			this.valorAcomodacao = valorAcomodacao;
		}

		public float getQtdPassagem() {
			return qtdPassagem;
		}

		public void setQtdPassagem(float qtdPassagem) {
			this.qtdPassagem = qtdPassagem;
		}

		public float getValorPassagem() {
			return valorPassagem;
		}

		public void setValorPassagem(float valorPassagem) {
			this.valorPassagem = valorPassagem;
		}

		public float getPedagio() {
			return pedagio;
		}

		public void setPedagio(float pedagio) {
			this.pedagio = pedagio;
		}

		public float getPertinentes() {
			return pertinentes;
		}

		public void setPertinentes(float pertinentes) {
			this.pertinentes = pertinentes;
		}		
		
	}
	
	

	public Key getId() {
		return id;
	}

	public void setId(Key id) {
		this.id = id;
	}

	public CustoFixo getCustoFixo() {
		return custoFixo;
	}

	public void setCustoFixo(CustoFixo custoFixo) {
		this.custoFixo = custoFixo;
	}

	public CustoOperacional getCustoOperacional() {
		return custoOperacional;
	}

	public void setCustoOperacional(CustoOperacional custoOperacional) {
		this.custoOperacional = custoOperacional;
	}

	public List<CustoProfissionais> getCustoProfissionaisSets() {
		return custoProfissionaisSets;
	}

	public void setCustoProfissionaisSets(
			List<CustoProfissionais> custoProfissionaisSets) {
		this.custoProfissionaisSets = custoProfissionaisSets;
	}

	public Orcamento getOrcamento() {
		return orcamento;
	}

	public void setOrcamento(Orcamento orcamento) {
		this.orcamento = orcamento;
	}

	public TotalOrcamental getTotalOrcamental() {
		return totalOrcamental;
	}

	public void setTotalOrcamental(TotalOrcamental totalOrcamental) {
		this.totalOrcamental = totalOrcamental;
	}
	
}
